package struts.ext.commons.lang.collection;

import java.util.List;

import org.apache.commons.collections.ListUtils;

import struts.ext.commons.lang.reflect.Converts;
import struts.ext.util.Arrays;


public abstract class Lists extends ListUtils {

	public static <T> T[] toArray(List<T> list) {
		return Collections.toArray(list);
	}
	
	/**
	 * 根据索引值取 List中的某个对象值
	 * @param <T>
	 * @param list
	 * @param index
	 * @return
	 */
	public static <T> T get(List<T> list,int index) {
		return (Collections.isEmpty(list)?null:list.get(index));
	}
	
	/**
	 * 获取List中的第一个对象，相当于Lists.get(List,0)
	 * @param <T>
	 * @param list
	 * @return
	 */
	public static <T> T first(List<T> list){
		return get(list,0);
	}
	
	/**
	 * 使用Apache commons中的Convert接口对List中的所有对象进行转型
	 * @param <T>
	 * @param src
	 * @param toClass
	 * @return
	 */
	public static <T> List<T> valuesTo(List<?> src,Class<T> toClass) {
		List<T> to = newList();
		if (Collections.isNotEmpty(src)) {
			for (Object o:src) {
				to.add(Converts.convert(o, toClass));
			}
		}
		return to;
	}
	
	/**
	 * 根据可变数组创建一个 List
	 * @param <T>
	 * @param objs
	 * @return
	 */
	public static <T>List<T> of(T...objs) {
		if (Arrays.isNotEmpty(objs))
			return Collections.list(objs);
		return null;
	}		
	
	/**
	 * 创建一个空的ArrayList
	 * @param <T>
	 * @return
	 */
	public static <T> List<T> newList(){
		return Collections.newList();
	}
	
	
}
